import 'package:flutter_app/bean/list_app_notice_entity.dart';
import 'package:flutter_app/network/Api.dart';
import 'package:flutter_app/network/ResultData.dart';
import 'package:flutter_app/ui/apply/apply_detail/apply_detail_view.dart';
import 'package:flutter_app/ui/collect/collect_detail2/collect_detail_view.dart';
import 'package:flutter_app/ui/main/main_logic.dart';
import 'package:flutter_app/ui/mine/film/film_detail/film_detail_view.dart';
import 'package:flutter_app/ui/mine/my_apply/my_apply_view.dart';
import 'package:flutter_app/ui/msg/msg_detail/msg_detail_view.dart';
import 'package:flutter_app/utils/NotificationUtils.dart';
import 'package:flutter_app/utils/toast_utils.dart';
import 'package:get/get.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';

import '../../../r.dart';
import '../../WebViewPage.dart';
import 'msg_list_state.dart';

class MsgListLogic extends GetxController {
  final MsgListState state = MsgListState();
  final mainLogic = Get.find<MainLogic>();

  // initialRefresh 是否最初刷新
  late RefreshController refreshController;

  int currentPage = 1 ;

  @override
  void onInit() {
    super.onInit();
    refreshController = RefreshController(initialRefresh: false);
  }

  @override
  void onReady() {
    super.onReady();
    postListAppNotice();
    getNotification();
  }

  /// 刷新
  void onRefresh() async {
    currentPage = 1;
    // 监视网络获取
    await Future.delayed(Duration(milliseconds: 1000));
    // 如果失败,使用refreshFailed ()
    postListAppNotice().then((value) {
      refreshController.refreshCompleted();
      refreshController.resetNoData();
    });
    getNotification();
  }

  /// 加载
  void onLoading() async{
    // 监视网络获取
    await Future.delayed(Duration(milliseconds: 1000));
    // 如果完成使用loadFailed()，如果没有数据返回，使用LoadNodata()
    int? totalPages = state.listAppNoticeEntity?.totalPages ?? 1;
    if (currentPage < totalPages) {
      currentPage++;
      postListAppNotice().then((value) => refreshController.loadComplete());
    } else {
      refreshController.loadNoData();
    }
  }

  //
  // 新报名提醒-报名详情（task_notice_12）
  // 报名即将截止-报名详情（task_notice_13）
  // 新任务--任务详情（task_notice_14）
  // 任务即将截止-任务详情（task_notice_15）
  // 问题确认提醒-任务详情（task_notice_16）
  //
  String getImageRid(String? type) {
    switch(type) {
      case "task_notice_12":
        return R.assetsImgIcon21;
      case "task_notice_13":
        return R.assetsImgIcon11;
      case "task_notice_14":
        return R.assetsImgIcon21;
      case "task_notice_15":
        return R.assetsImgIcon11;
      case "task_notice_16":
        return R.assetsImgIcon27;
      default:
        return R.assetsImgIcon27;
    }
  }

  /// 根据消息类型不同，跳转不跳页面
  // 新报名提醒-报名详情（task_notice_12）
  // 报名即将截止-报名详情（task_notice_13）
  // 新任务--任务详情（task_notice_14）
  // 任务即将截止-任务详情（task_notice_15）
  // 问题确认提醒-任务详情（task_notice_16）
  // int index 当前item索引
  void goToPage(ListAppNoticeContent item, int index) {
    if (item.isRead == "0") {
      mainLogic.updateNoticeRead(item.id).then((value) {
        state.listAppNoticeEntity?.content![index].isRead = "1";
        update();
      });
    }
    switch (item.type) {
      // 明察暗访
      case "task_notice_05":
      case "task_notice_12":
      case "task_notice_13":
      case "task_notice_18":
      // 窗口值班
      case "schedule_message_03":
        Get.to(() => ApplyDetailPage(title: "报名详情",), arguments: item.collectId);
        break;
      // 采集任务详情
      case "task_notice_14":
      case "task_notice_15":
      case "task_notice_16":
      // taskStatus 0进行中  1已结束
        if (item.taskStatus == "1") {
          toast.show("任务已经结束");
          return;
        }
        Get.to(() => CollectDetailPage(title: "任务详情",), arguments: item.groupId);
        break;
      // 我的报名
      case "schedule_message_04":
      case "schedule_message_06":
        Get.to(() => MyApplyPage(title: "我的报名",));
        break;
      case "task_notice_17":
        Get.to(() => MsgDetailPage(title: "公告通知",), arguments: item.busId);
        break;
      case "qn_message_01":
        Get.to(() => WebViewPage(title: item.labelName ?? "", url: item.url ?? "",));
        break;
      // 随手拍上报记录详情
      case "OT_FLOW_04":
      case "OT_FLOW_05":
        Get.to(() => FilmDetailPage(title: "随手拍上报记录详情",), arguments: item.busId);
        break;
      default:
        break;
    }
  }

  /// 获取消息列表
  Future<void> postListAppNotice() async {
    Map<String, dynamic> param = {
      "currentPage": currentPage,
      'pageSize': 15,
      'param': ""
    };
    ResultData resultData = await Api.postListAppNotice(param);
    if (resultData.isSuccess) {
      if (currentPage == 1) {
        state.listAppNoticeEntity = ListAppNoticeEntity.fromJson(resultData.data['data']);
      } else if (currentPage > 1) {
        state.listAppNoticeEntity?.content?.addAll(ListAppNoticeEntity.fromJson(resultData.data['data']).content!);
      }
    } else {
      toast.show(resultData.data["message"]);
    }
    update();
  }

  /// 更新消息全部已读
  Future<void> updateAllNoticeRead() async {
    Map<String, dynamic> param = {};
    ResultData resultData = await Api.updateAllNoticeRead(param);
    if (resultData.isSuccess) {
      state.listAppNoticeEntity!.content!.forEach((element) {
        element.isRead = "1";
      });
      mainLogic.state.noticeReadCount.value = 0;
      update();
    } else {
      toast.show(resultData.data["message"]);
    }
  }




  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  /// 检查是否  开启通知权限
  Future<void> getNotification() async {
    /// 检查是否开启通知权限  ture 已开启
    // 返回值 是否显示  当权限开启时，不显示
    state.notification = !await NotificationUtils().notificationEnabled();
    update();
  }

  /// 打开权限设置页面
  void openNotificationSettings() {
    NotificationUtils().openNotificationSettings();
  }

  /// 设置 是否显示  ture 显示 false不显示
  void setNotification(bool b) {
    state.notification = b;
    update();
  }

  @override
  void onClose() {
    super.onClose();
  }
}
